package org.easy.eao.executer;

import java.lang.reflect.Method;
import java.util.List;

import org.easy.eao.Action;
import org.easy.eao.exception.CannotBuildExecuterException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 执行者创建器
 * 
 * @author Frank
 */
public class ExecuterBuilder {

	/** 日志对象 */
	static final Logger logger = LoggerFactory.getLogger(ExecuterBuilder.class);

	/**
	 * 创建指定方法所对应的方法执行者实例
	 * 
	 * @param clz
	 *            方法所在的 EAO 接口
	 * @param method
	 *            方法
	 * @param target
	 *            方法代理对象,允许为空
	 * @return
	 */
	public Executer builder(Class<?> clz, Method method, List<Action<?>> actions) {
		if (actions.size() == 0) {
			String message = "没有可供执行的存取动作(Action)[class:" + clz + " method:" + method + "]";
			logger.error(message);
			throw new CannotBuildExecuterException(message);
		}

		if (actions.size() == 1)
			return new SingleExecuter(actions.get(0));
		return ChainExecuter.valueOf(actions);
	}

}
